home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / SOCKCMD.C < prev    next >
Text File  |  1993-08-09  |  2KB  |  123 lines

  1. /* Socket status display code
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include <stdio.h>
  5. #include "global.h"
  6. #include "config.h"
  7. #include "mbuf.h"
  8. #include "proc.h"
  9. #ifdef LZW
  10. #include "lzw.h"
  11. #endif
  12. #include "usock.h"
  13. #include "socket.h"
  14. #include "ax25.h"
  15. #include "netrom.h"
  16. #include "tcp.h"
  17. #ifdef UDP
  18. #include "udp.h"
  19. #endif
  20. #include "commands.h"
  21.  
  22. /* Socket status display command */
  23. int
  24. dosock(int argc,char **argv,void *p)
  25. {
  26.     struct usock *up;
  27.     struct sockaddr fsock;
  28.     int s, i = SOCKSIZE;
  29.     char *cp;
  30.  
  31.     static char *Socktypes[] = {
  32.         "Not Used",
  33.         "TCP",
  34.         "UDP",
  35.         "AX25 I",
  36.         "AX25 UI",
  37.         "Raw IP",
  38.         "NETROM3",
  39.         "NETROM",
  40.         "Loc St",
  41.         "Loc Dg"
  42.     };
  43.  
  44.     if(argc < 2){
  45.         tputs("S#  Type    PCB  Remote socket             Owner\n");
  46.         for(s = SOCKBASE; s < Nusock + SOCKBASE; s++) {
  47.             if((up = itop(s)) == NULLUSOCK)
  48.                 continue;
  49.  
  50.             cp = getpeername(s,(char *)&fsock,&i) == 0 ? psocket(&fsock) : "";
  51.  
  52.             tprintf("%3d %-8s%-5lx%-26s%-5lx %s\n",
  53.                 s,
  54.                 Socktypes[up->type],
  55.                 ptol(up->cb.p),
  56.                 cp,
  57.                 ptol(up->owner),
  58.                 up->owner->name);
  59.         }
  60.         return 0;
  61.     }
  62.     s = atoi(argv[1]);
  63.  
  64.     if(s < SOCKBASE || s >= Nusock + SOCKBASE) {
  65.         tputs("Number out of range\n");
  66.         return EOF;
  67.     }
  68.     if((up = itop(s)) == NULLUSOCK){
  69.         tputs("Socket not in use\n");
  70.         return EOF;
  71.     }
  72.     tprintf("%s %lx %s",
  73.         Socktypes[up->type],
  74.         ptol(up->cb.p),
  75.         up->flag == SOCK_ASCII ? "ascii" : "binary");
  76.     if(up->eol[0] != '\0') {
  77.         tputs(" eol seq:");
  78.         for(i = 0; up->eol[i] != '\0' && i < sizeof (up->eol); i++) {
  79.             tprintf(" %02x",up->eol[i]);
  80.         }
  81.     }
  82.     tputs("\n");
  83.     if(up->cb.p == NULL)
  84.         return 0;
  85.     switch(up->type){
  86.     case TYPE_RAW:
  87.     case TYPE_LOCAL_DGRAM:
  88.         tprintf("Inqlen: %d packets\n",socklen(s,0));
  89.         tprintf("Outqlen: %d packets\n",socklen(s,1));
  90.         break;
  91.     case TYPE_LOCAL_STREAM:
  92.         tprintf("Inqlen: %d bytes\n",socklen(s,0));
  93.         tprintf("Outqlen: %d bytes\n",socklen(s,1));
  94.         break;
  95.     case TYPE_TCP:
  96.         st_tcp(up->cb.tcb);
  97.         break;
  98. #ifdef UDP
  99.     case TYPE_UDP:
  100.         st_udp(up->cb.udp);
  101.         break;
  102. #endif
  103. #ifdef    AX25
  104.     case TYPE_AX25I:
  105.         st_ax25(up->cb.ax25);
  106.         break;
  107. #endif
  108. #ifdef    NETROM
  109.     case TYPE_NETROML4:
  110.         donrdump(up->cb.nr4);
  111.         break;
  112. #endif
  113.     }
  114. #ifdef LZW
  115.     if(up->zout != NULLLZW)
  116.         tprintf("Bytes compressed %ld\n",up->zout->cnt);
  117.     if(up->zin != NULLLZW)
  118.         tprintf("Bytes decompressed %ld\n",up->zin->cnt);
  119. #endif
  120.     return 0;
  121. }
  122.  
  123.